242. .Net core 8 使用apt install 權限不足

WHY

今天早上又被人抓住說要開新服務,
看這個架構要怎麼調。
測試時來到Docker build,然後就掛了。

SOLUTION

在使用apt update的時候,出現了Permission denied
在Dockerfile的上層加上

USER root

就能執行了,
但不知道為什麼,我沒辦法復現錯誤狀況,
使用 docker system prune -a 全部清除了也是一樣。

但當時確實有碰到這個問題。

附上完整Dockerfile

FROM mcr.microsoft.com/dotnet/aspnet:8.0 AS base

USER root
WORKDIR /app

RUN  apt update && apt install -y curl python3
RUN curl -O https://dl.google.com/dl/cloudsdk/channels/rapid/downloads/google-cloud-cli-443.0.0-linux-x86_64.tar.gz \
&& tar -xf google-cloud-cli-443.0.0-linux-x86_64.tar.gz && ./google-cloud-sdk/install.sh --command-completion=true --path-update=true --quiet
COPY gcs-download.json .
RUN /app/google-cloud-sdk/bin/gcloud auth activate-service-account abc@abc.com  --key-file=gcs-download.json
EXPOSE 8080
EXPOSE 8081

其實應該用workload Identity會比較好,但這程式預計要放的位置,
要改的話變動太大。

ref. # New non-root 'app' user in Linux images

2024/12/06更新

還有另一個方法,
在deploy上面加上下面指令,
讓pod以root的身分執行。

containers:
	....
    securityContext:
      allowPrivilegeEscalation: true

securityContext:
	runAsUser: 0

ref. 為 Pod 或容器組態安全上下文